home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / QuickDraw GX / QuickDraw GX Info / QuickDraw GX Interfaces / Interfaces & Libraries / interfaces / Messages.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-03-24  |  11.1 KB  |  431 lines  |  [TEXT/MPS ]

  1. /* ------------------------------------------------------------------------------
  2.  
  3.     FILENAME
  4.         Messages.h
  5.  
  6.     DESCRIPTION
  7.         This file contains all of the public data structures, constants, and 
  8.         function declarations for the Message Manager.
  9.  
  10.     COPYRIGHT
  11.         Copyright © Apple Computer, Inc. 1989, 1990, 1991, 1992, 1993
  12.         All rights reserved. 
  13.  
  14. ------------------------------------------------------------------------------- */
  15.  
  16.  
  17. #ifndef __MESSAGEMANAGER__
  18. #define __MESSAGEMANAGER__
  19.  
  20. #ifndef __TYPES__
  21.     #include <Types.h>
  22. #endif
  23.  
  24.  
  25. /*************/
  26. /* Constants */
  27. /*************/
  28.  
  29.  
  30. /* Message Manager Gestalt Selector... */
  31.  
  32.  
  33. enum {
  34.     gestaltMessageMgrVersion = 'mess'
  35. };
  36.  
  37.  
  38. /* Message Manager Error Result Codes... */
  39.  
  40.  
  41. enum {
  42.     messageStopLoopingErr = -5775,
  43.     cantDeleteRunningHandlerErr = -5776,
  44.     noMessageTableErr = -5777,
  45.     dupSignatureErr = -5778,
  46.  
  47.     messageNotReceivedErr = -5799
  48. };
  49.  
  50.  
  51. /* Message Manager Class Options... */
  52.  
  53.  
  54. enum {
  55.     messageClassNoOptions         = 0x00000000,
  56.     messageClassIgnoreResult    = 0x80000000
  57. };
  58.  
  59.  
  60. /* Message Manager Useful Constants... */
  61.  
  62.  
  63. enum {
  64.     topMessageHandler     = 0                /* indicates top handler when position is expected */
  65. };
  66.  
  67.  
  68. /* the Message Manager trap */
  69.  
  70.  
  71. #define messageManagerTrap 0xABFB    /* C++ will choke on an enum in a trap definition */
  72.  
  73.  
  74. /* Message Manager Selectors... */
  75.  
  76.  
  77. #define sendObjectMessageSelector 0x702F
  78. #define sendObjectMessageToSelector 0x7030
  79. #define startObjectMessageAtSelector 0x7031
  80. #define sendMessageSelector 0x7032
  81. #define sendMessageToSelector 0x7033
  82. #define startMessageAtSelector 0x7034
  83. #define forwardSelector 0x7035
  84. #define forwardThisSelector 0x7036
  85.  
  86.  
  87. /*************/
  88. /* Macros      */
  89. /*************/
  90.  
  91.  
  92. /* the SendObjectMessageGlue macro assumes the message target is in register A0 */
  93.  
  94. #define SendObjectMessageGlue(table, selector) {                                    \
  95.     sendObjectMessageSelector, 0x223C, table, selector, messageManagerTrap    \
  96. }
  97.  
  98. #define SendMessageGlue(table, selector) {                                    \
  99.     sendMessageSelector, 0x223C, table, selector, messageManagerTrap    \
  100. }
  101.  
  102. #define ForwardMessageGlue(table, selector) {                            \
  103.     forwardSelector, 0x223C, table, selector, messageManagerTrap    \
  104. }
  105.  
  106. #define ForwardThisMessageGlue { forwardThisSelector, messageManagerTrap }
  107.  
  108.  
  109.  
  110. /*************/
  111. /* Types      */
  112. /*************/
  113.  
  114.  
  115. typedef struct PrivateMessageClassRecord *MessageClass;        /* abstract data type for message class */
  116.  
  117. typedef struct PrivateMessageHandlerRecord *MessageHandler;    /* abstract data type for message handler */
  118.  
  119. typedef struct PrivateMessageObjectRecord *MessageObject;    /* abstract data type for message object */
  120.  
  121.  
  122. /* definition of an override table... */
  123.  
  124.  
  125. struct MessageOverride{
  126.     short        messageID;        /* message being overridden */
  127.     long        dispatch1;        /* first dispatch selector */
  128.     long        dispatch2;        /* second dispatch selector */
  129. };
  130.  
  131. typedef struct MessageOverride MessageOverride;
  132.  
  133.  
  134. struct MessageOverrideTable{
  135.     short                    numOverrides;
  136.     MessageOverride    overrides[1];
  137. };
  138.  
  139. typedef struct MessageOverrideTable MessageOverrideTable, *MessageOverrideTablePtr;
  140.  
  141.  
  142. typedef OSType Signature;
  143.  
  144. typedef void* MessageStackMark[2];
  145.  
  146.  
  147. #ifdef __cplusplus
  148. extern "C" {
  149. #endif
  150.  
  151.  
  152. typedef void (*MessageHandlerSetupProc) (void *handlerData);
  153.  
  154. typedef OSErr (*MessageClassExceptionProc) (MessageObject, OSErr);
  155.  
  156. typedef OSErr (*MessageObjectLoopProc) (MessageObject, void *refCon);
  157.  
  158. typedef OSErr (*MessageHandlerLoopProc) (MessageHandler, void *refCon);
  159.  
  160. typedef void (*MessageGlobalsInitProc) (void *messageGlobals);
  161.  
  162.  
  163.  
  164. /**********************************************************************
  165.  ***************            Public Interfaces            ***********************
  166.  *********************************************************************/
  167.  
  168.  
  169.  
  170. /* **************************************** */
  171. /* Message Class Management API Routines... */
  172. /* **************************************** */
  173.  
  174.  
  175.  
  176. MessageClass NewMessageClass (long numTables, long classOptions)
  177. = {0x7000, messageManagerTrap};
  178.  
  179. void DisposeMessageClass (MessageClass)
  180. = {0x7001, messageManagerTrap};
  181.  
  182. MessageClass CloneMessageClass (MessageClass)
  183. = {0x7002, messageManagerTrap};
  184.  
  185. long CountMessageClassOwners (MessageClass)
  186. = {0x7003, messageManagerTrap};
  187.  
  188. MessageClass NewDerivedMessageClass (MessageClass parentClass)
  189. = {0x7004, messageManagerTrap};
  190.  
  191. void *SetMessageClassDispatchProc (MessageClass, void *dispatchProc)
  192. = {0x7005, messageManagerTrap};
  193.  
  194. MessageHandlerSetupProc SetMessageClassHandlerSetupProc (MessageClass, MessageHandlerSetupProc)
  195. = {0x7006, messageManagerTrap};
  196.  
  197. MessageHandlerSetupProc SetMessageClassHandlerReturnProc (MessageClass, MessageHandlerSetupProc)
  198. = {0x7007, messageManagerTrap};
  199.  
  200. MessageClassExceptionProc SetMessageClassExceptionProc (MessageClass, MessageClassExceptionProc)
  201. = {0x7008, messageManagerTrap};
  202.  
  203. void *GetMessageClassRefCon (MessageClass)
  204. = {0x7009, messageManagerTrap};
  205.  
  206. void *SetMessageClassRefCon (MessageClass, void *refCon)
  207. = {0x700A, messageManagerTrap};
  208.  
  209. OSErr NewMessageHandler (MessageClass,
  210.                                  long handlerPos,
  211.                                  MessageOverrideTablePtr overrideTableList[],
  212.                                  void *handlerData,
  213.                                  Signature handlerSig,
  214.                                  MessageHandler *msgHandler)
  215. = {0x700B, messageManagerTrap};
  216.  
  217. OSErr RemoveMessageHandler (MessageClass, MessageHandler)
  218. = {0x700C, messageManagerTrap};
  219.  
  220. OSErr InstallMessageHandlerOverride (MessageClass,
  221.                                                  MessageHandler,
  222.                                                  long messageSelector,
  223.                                                  long dispatch1,
  224.                                                  long dispatch2)
  225. = {0x700D, messageManagerTrap};
  226.  
  227. void RemoveMessageHandlerOverride (MessageClass,
  228.                                               MessageHandler,
  229.                                               long messageSelector)
  230. = {0x700E, messageManagerTrap};
  231.  
  232. void *GetMessageHandlerData (MessageClass, MessageHandler)
  233. = {0x700F, messageManagerTrap};
  234.  
  235. void *SetMessageHandlerData (MessageClass,
  236.                                       MessageHandler,
  237.                                       void *handlerData)
  238. = {0x7010, messageManagerTrap};
  239.  
  240. void DisableMessageHandler (MessageClass, MessageHandler)
  241. = {0x7011, messageManagerTrap};
  242.  
  243. void EnableMessageHandler (MessageClass, MessageHandler)
  244. = {0x7012, messageManagerTrap};
  245.  
  246. int MessageHandlerDisabled (MessageClass, MessageHandler)
  247. = {0x7013, messageManagerTrap};
  248.  
  249. long CountMessageHandlers (MessageClass)
  250. = {0x7014, messageManagerTrap};
  251.  
  252. MessageHandler GetMessageHandlerAt (MessageClass, long handlerPosition)
  253. = {0x7015, messageManagerTrap};
  254.  
  255. Signature GetMessageHandlerSignature (MessageClass, MessageHandler)
  256. = {0x7016, messageManagerTrap};
  257.  
  258. MessageHandler FindMessageHandler (MessageClass, Signature)
  259. = {0x7017, messageManagerTrap};
  260.  
  261. long GetMessageHandlerPosition (MessageClass, MessageHandler)
  262. = {0x7018, messageManagerTrap};
  263.  
  264. OSErr ForEachMessageHandlerDo (MessageClass, MessageHandlerLoopProc, void *refCon)
  265. = {0x7019, messageManagerTrap};
  266.  
  267.  
  268.  
  269. /* ***************************************** */
  270. /* Message Object Management API Routines... */
  271. /* ***************************************** */
  272.  
  273.  
  274.  
  275. MessageObject NewMessageObject (MessageClass)
  276. = {0x701A, messageManagerTrap};
  277.  
  278. void DisposeMessageObject (MessageObject)
  279. = {0x701B, messageManagerTrap};
  280.  
  281. MessageObject CloneMessageObject (MessageObject)
  282. = {0x701C, messageManagerTrap};
  283.  
  284. long CountMessageObjectOwners (MessageObject)
  285. = {0x701D, messageManagerTrap};
  286.  
  287. void *GetMessageObjectRefCon (MessageObject)
  288. = {0x701E, messageManagerTrap};
  289.  
  290. void *SetMessageObjectRefCon (MessageObject, void *)
  291. = {0x701F, messageManagerTrap};
  292.  
  293. MessageClass GetMessageObjectClass (MessageObject)
  294. = {0x7020, messageManagerTrap};
  295.  
  296. long CountMessageObjects (MessageClass)
  297. = {0x7021, messageManagerTrap};
  298.  
  299. OSErr ForEachMessageObjectDo (MessageClass, MessageObjectLoopProc, void *refCon)
  300. = {0x7022, messageManagerTrap};
  301.  
  302.  
  303.  
  304. /* ***************************************** */
  305. /* Message Target Management API Routines... */
  306. /* ***************************************** */
  307.  
  308.  
  309.  
  310. MessageObject GetMessageTarget (void)
  311. = {0x7023, messageManagerTrap};
  312.  
  313. MessageObject SetMessageTarget (MessageObject)
  314. = {0x7024, messageManagerTrap};
  315.  
  316. void MarkMessageStack (MessageStackMark)
  317. = {0x7025, messageManagerTrap};
  318.  
  319. void UnwindMessageStack (MessageStackMark)
  320. = {0x7026, messageManagerTrap};
  321.  
  322.  
  323.  
  324. /* ******************************* */
  325. /* Message Handler API Routines... */
  326. /* ******************************* */
  327.  
  328.  
  329.  
  330. MessageHandler GetMessageHandler (void)
  331. = {0x7027, messageManagerTrap};
  332.  
  333. long CountMessageHandlerInstances (void)
  334. = {0x7028, messageManagerTrap};
  335.  
  336. void *GetMessageHandlerClassContext (void)
  337. = {0x7029, messageManagerTrap};
  338.  
  339. void *SetMessageHandlerClassContext (void *)
  340. = {0x702A, messageManagerTrap};
  341.  
  342. void *GetMessageHandlerInstanceContext (void)
  343. = {0x702B, messageManagerTrap};
  344.  
  345. void *SetMessageHandlerInstanceContext (void *)
  346. = {0x702C, messageManagerTrap};
  347.  
  348. OSErr NewMessageGlobals (long messageGlobalsSize, MessageGlobalsInitProc)
  349. = {0x702D, messageManagerTrap};
  350.  
  351. void DisposeMessageGlobals (void)
  352. = {0x702E, messageManagerTrap};
  353.  
  354.  
  355. /* **************************************** */
  356. /* Message Sending API Routines...                */
  357. /* **************************************** */
  358. #pragma push
  359. #pragma skipping on
  360. #ifndef __powerc
  361. #ifdef applec
  362.  
  363.     #pragma parameter __D0 SendObjectMessage(__A0, __D1)
  364.     OSErr SendObjectMessage (MessageObject, long messageSelector, ...)
  365.     = {sendObjectMessageSelector, messageManagerTrap};
  366.     
  367.     #pragma parameter __D0 SendObjectMessageTo(__A0, __D1, __D2)
  368.     OSErr SendObjectMessageTo (MessageObject, long messageSelector, MessageHandler, ...)
  369.     = {sendObjectMessageToSelector, messageManagerTrap};
  370.     
  371.     #pragma parameter __D0 StartObjectMessageAt(__A0, __D1, __D2)
  372.     OSErr StartObjectMessageAt (MessageObject, long messageSelector, MessageHandler, ...)
  373.     = {startObjectMessageAtSelector, messageManagerTrap};
  374.     
  375.     #pragma parameter __D0 SendMessage(__D1)
  376.     OSErr SendMessage (long messageSelector, ...)
  377.     = {sendMessageSelector, messageManagerTrap};
  378.     
  379.     #pragma parameter __D0 SendMessageTo(__D1, __D2)
  380.     OSErr SendMessageTo (long messageSelector, MessageHandler, ...)
  381.     = {sendMessageToSelector, messageManagerTrap};
  382.     
  383.     #pragma parameter __D0 StartMessageAt(__D1, __D2)
  384.     OSErr StartMessageAt (long messageSelector, MessageHandler, ...)
  385.     = {startMessageAtSelector, messageManagerTrap};
  386.     
  387.     #pragma parameter __D0 ForwardMessage(__D1)
  388.     OSErr ForwardMessage (long messageSelector, ...)
  389.     = {forwardSelector, messageManagerTrap};
  390.  
  391.     OSErr ForwardThisMessage ()
  392.     = {forwardThisSelector, messageManagerTrap};
  393.     
  394. #else
  395.  
  396.     OSErr SendObjectMessage (MessageObject, long messageSelector, ...)
  397.     = {0x205F, 0x221F, sendObjectMessageSelector, messageManagerTrap, 0x518F};
  398.     
  399.     OSErr SendObjectMessageTo (MessageObject, long messageSelector, MessageHandler, ...)
  400.     = {0x205F, 0x221F, 0x241F, sendObjectMessageToSelector, messageManagerTrap, 0x9EFC, 0x000C};
  401.     
  402.     OSErr StartObjectMessageAt (MessageObject, long messageSelector, MessageHandler, ...)
  403.     = {0x205F, 0x221F, 0x241F, startObjectMessageAtSelector, messageManagerTrap, 0x9EFC, 0x000C};
  404.     
  405.     OSErr SendMessage (long messageSelector, ...)
  406.     = {0x221F, sendMessageSelector, messageManagerTrap, 0x598F};
  407.     
  408.     OSErr SendMessageTo (long messageSelector, MessageHandler, ...)
  409.     = {0x221F, 0x241F, sendMessageToSelector, messageManagerTrap, 0x518F};
  410.     
  411.     OSErr StartMessageAt (long messageSelector, MessageHandler, ...)
  412.     = {0x221F, 0x241F, startMessageAtSelector, messageManagerTrap, 0x518F};
  413.     
  414.     OSErr ForwardMessage (long messageSelector, ...)
  415.     = {0x221F, forwardSelector, messageManagerTrap, 0x598F};
  416.  
  417.     OSErr ForwardThisMessage (...)
  418.     = {forwardThisSelector, messageManagerTrap};
  419.     
  420. #endif
  421. #endif
  422. #pragma pop
  423.  
  424.  
  425. #ifdef __cplusplus
  426. }
  427. #endif
  428.  
  429.  
  430. #endif
  431.